package com.mastercard.assets.web.util.to;

import java.io.Serializable;
import java.sql.Timestamp;
import java.util.GregorianCalendar;

import com.mastercard.assets.jpa.TblPreimplementacion;
import com.mastercard.assets.jpa.TblTareaPreimplementacion;
import com.mastercard.assets.util.MCUtil;

public class TareaPendienteTO
	implements
		Serializable
{
	private static final long dayInMillis = 1000L * 60L * 60L * 24L ;
	private static final long twoDaysInMillis = 1000L * 60L * 60L * 24L * 2L ;
	private static final long threeDaysInMillis = 1000L * 60L * 60L * 24L * 2L ;
	private static final long fourDaysInMillis = 1000L * 60L * 60L * 24L * 2L ;
	private static final long fiveDaysInMillis = 1000L * 60L * 60L * 24L * 2L ;
	
	private TblTareaPreimplementacion tareaPreimplementation ;
	private int image ; // 1- En tiempo, 2- Por vencer, 3-Vencido
	private int numberOfDaysToExecutionDate = 0 ;
	
	public TblTareaPreimplementacion getTareaPreimplementation() {
		return tareaPreimplementation;
	}

	public int getImage() {
		return image;
	}

	public int getNumberOfDaysToExecutionDate() {
		return numberOfDaysToExecutionDate;
	}

	public TareaPendienteTO( TblTareaPreimplementacion tareaPreimplementacion )
	{
		this.tareaPreimplementation = tareaPreimplementacion ;
		
		// fecha actual
		GregorianCalendar gc = new GregorianCalendar( ) ;
		
		// toma el tiempo en milisegundos
		long time = gc.getTimeInMillis( ) ;
		
		// toma la fecha de activacion y limite
		Timestamp fechaActiva = tareaPreimplementacion.getFechaActiva( ) ;
		Timestamp fechaLimite = tareaPreimplementacion.getFechaLimite( ) ;
		
//		System.out.println( "TareaPendienteTO.java: FecjaActiva> " + fechaActiva ) ;
//		System.out.println( "TareaPendienteTO.java: FecjaLimit> " + fechaLimite ) ;
//		
		long fechaActivaMillis = -1 ;
		
		// long de las fechas
		if( fechaActiva != null )
			fechaActivaMillis = fechaActiva.getTime( ) ;
		else
			fechaActivaMillis = time - ( 1000L * 60L * 60L * 24L * 365L ) ;
		
		long fechaLimiteMillis = fechaLimite.getTime( ) ;
		
		int diasVerde = 4 ;
		int diasAmarillo = 2 ;
		int diasRojo = 1 ;
		
		// cantidad de dias para verde
		try
		{
			diasVerde = Integer.parseInt( MCUtil.getConfProperty( "tareas.tiempo.verde" ) ) ;
			diasAmarillo = Integer.parseInt( MCUtil.getConfProperty( "tareas.tiempo.amarillo" ) ) ;
			diasRojo = Integer.parseInt( MCUtil.getConfProperty( "tareas.tiempo.rojo" ) ) ;
		}catch( Exception e )
		{
			
		}
		
		// calculo de fecha vencida
		long fechaVencidaMillis = fechaLimiteMillis - ( diasRojo * dayInMillis ) ;
		// calculo de dos dias menos
		long fechaAmarillaMenos = fechaVencidaMillis - ( diasAmarillo * dayInMillis ) ;
		// calculo de cinco dias menos
		long fechaVerdeMenos = fechaVencidaMillis - ( diasVerde * dayInMillis ) ;
		
//		System.out.println( "TareaPendienteTO.java: FechaVencida> " + new Timestamp( fechaVencidaMillis ) ) ;
//		System.out.println( "TareaPendienteTO.java: FechaVencidaDosDiasMenos> " + new Timestamp( fechaAmarillaMenos ) ) ;
//		System.out.println( "TareaPendienteTO.java: FechaVencidaCincoDiasMenos> " + new Timestamp( fechaVerdeMenos ) ) ;
//		
//		System.out.println( "TareaPendienteTO.java: TiempoActual> " + new Timestamp( time ) ) ;
//		
		// si la fecha actual esta despues de fechaVencidaMillis
		if( time >= fechaVencidaMillis )
			image = 3 ;
		// si esta entre dosDiasMenos y fechaVencidaMillis
		else if( time >= fechaAmarillaMenos && time < fechaVencidaMillis )
			image = 2 ;
		else
			image = 1 ;
		
//		System.out.println( "TareaPendienteTO.java: Imagen> " + image ) ;
//		
	}
	
}
